import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import { resolve } from 'path';
import legacy from '@vitejs/plugin-legacy';
import fixVueRouterPlugin from './vite-plugin-fix-router';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()],
    }),
    legacy({
      // 为特定的浏览器添加polyfill
      targets: ['defaults', 'not IE 11'],
      // 自动注入polyfill
      polyfills: true,
      // 处理第三方依赖中的CommonJS模块
      modernPolyfills: true
    }),
    // 添加自定义插件，修复vue-router兼容性问题
    fixVueRouterPlugin(),
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
    },
  },
  server: {
    port: 4200,
    host: '0.0.0.0', // 允许外部访问
    proxy: {
      // 代理所有 /api 请求到后端服务器
      '/api': {
        target: 'http://192.168.10.118:8080', // 后端服务器地址
        // target: 'http://192.168.10.104:8098',
        changeOrigin: true, // 改变请求头中的origin字段
        secure: false, // 如果是https接口，需要配置这个参数
        rewrite: (path) => path.replace(/^\/api/, '') // 重写路径，去掉/api前缀
      }
    }
  },
  build: {
    commonjsOptions: {
      // 处理 vue-router 等第三方库中的 CommonJS 模块
      transformMixedEsModules: true,
    },
  },
  optimizeDeps: {
    // 强制预构建这些依赖，避免运行时动态导入导致的缓存问题
    include: [
      'vue-router',
      'vant',
      'vant/es',
      'vant/es/picker/style/index',
      'vant/es/picker',
      'vant/lib/picker/style/index.css',
      'vant/es/nav-bar/style/index',
      'vant/es/nav-bar',
      'vant/es/loading/style/index',
      'vant/es/loading',
      'vant/es/button/style/index',
      'vant/es/button',
      'vant/es/field/style/index',
      'vant/es/field',
      'vant/es/icon/style/index',
      'vant/es/icon',
      'axios'
    ],
    // 排除不需要预构建的依赖
    exclude: [],
    esbuildOptions: {
      // 设置为 'esnext' 以支持顶级 await 等特性
      target: 'esnext',
    },
    // 强制重新优化依赖
    force: false,
    // 启用依赖扫描缓存
    entries: [
      'src/main.ts',
      'src/router.ts',
      'src/view/**/*.vue'
    ]
  },
  // 设置依赖缓存目录（移到根级配置）
  cacheDir: 'node_modules/.vite',
});
